package pkg

import (
	"errors"
	"fmt"
	"os"
	"os/exec"
	"syscall"
)

//CreatePath 创建路径
func CreatePath(dir string) {
	if _, err := os.Stat(dir); err != nil && os.IsNotExist(err) {
		if err := os.MkdirAll(dir, 0755); err != nil {
			panic(fmt.Sprintf("无法创建目录:%s", dir))
		}
	}
}

//ForkChild 执行任务
func ForkChild(stdout *os.File, stderr *os.File, procName string, params []string, execDir string) (*os.Process, error) {
	files := []*os.File{
		os.Stdin,
		stdout,
		stderr,
	}
	// 获取当前环境变量，并且传入子进程。
	environment := os.Environ()
	execAbsPath, err := exec.LookPath(procName)
	if err == nil {
		procName = execAbsPath
	}
	params = append([]string{procName}, params...)
	p, err := os.StartProcess(procName, params, &os.ProcAttr{
		Dir:   execDir,
		Env:   environment,
		Files: files,
		Sys:   &syscall.SysProcAttr{},
	})
	if err != nil {
		return nil, errors.New(fmt.Sprintf("创建进程出错:" + err.Error()))
	}
	return p, nil
}
